<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>

<script>

    //Es5中的类
    function A(x) {
        this.x = x
    }
    A.prototype.getX = function () {
        console.log(this.x);
    }



    {
        //Es6中的类
        // A();//Class constructor A cannot be invoked without 'new'
        //ES6中 基础CLASS创造出来的类是不能当作普通函数执行的

        class A {
            constructor(x) {//私有的属性和方法;
                this.x = x
            }
            // name: "aa",
            getX() {//公有的方法
                console.log(this.x)
            }
        }
        A.prototype.getX = function () { //公有的方法
            console.log(this.x);
        };
        A.prototype.name = "aa"; //公有的属性*!/

        class B {
            constructor(y) {
                // A.call(this, 200); //Class constructor A cannot be invoked without 'new'
                this.y = y
            }
            getY() {
                console.log(this.y)
            }
        }
        // B.prototype = Object.create(A.prototype); //ES6中的类 是不允许重定向原型的

        let b1 = new B(200);
        console.log(b1);
    }





    {//ES6中的继承
        //class CHILD extends PARENT{}
        //=> B.prototype.__proto__ = A.prototype
        class A {
            constructor(x) {
                this.x = x
            }
            getX() {//公有的方法
                console.log(this.x)
            }
        }
        class B extends A {
            //如果不写constructor, js在执行的时候会自动的帮我们创建一个constructor;
            constructor(y) {
                super(200);
                //如果不写super会报错的;
                //super内部实现原理---> A.call(this, 200);
                this.y = y
            }
            getY() {
                console.log(this.y)
            }
        }
        let b1 = new B(100);
        console.log(b1);
    }




</script>